package org.goj.practice.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.goj.common.entity.practice.Solution;
import org.goj.practice.vo.SolutionContestVO;
import org.goj.practice.vo.SolutionSource;
import org.goj.practice.vo.StatusVO;

import java.util.List;

/**
 * <p>
 * 程序运行结果记录 服务类
 * </p>
 *
 * @author CK
 * @since 2020-12-02
 */
public interface SolutionService extends IService<Solution> {

    /**
     * 提交代码测评
     *
     * @param solution 提交实体类
     * @param source   提交源码
     * @return int
     * @author CK
     * @date 2021/3/21 16:23
     */
    int submit(Solution solution, String source);

    /**
     * 提交评测后更新题目数据
     *
     * @param problemId 题目ID
     * @return boolean
     * @author CK
     * @date 2021/3/25 21:33
     */
    boolean updateSubmitProblem(Integer problemId);

    /**
     * 根据提交ID返回测评结果
     *
     * @param solutionId 提交ID
     * @return List<SolutionByIdVO>
     * @author CK
     * @date 2021/3/21 16:24
     */
    List<Solution> result(Integer solutionId);

    /**
     * 根据userId和problemId返回评测列表
     *
     * @param userId    用户ID
     * @param problemId 题目ID
     * @param contestId 竞赛ID
     * @return List<Solution>
     * @author CK
     * @date 2021/3/22 9:58
     */
    List<Solution> result(Integer userId, Integer problemId, Integer contestId);

    /**
     * 条件查询提交状态
     *
     * @param current      当前页
     * @param size         尺寸
     * @param sort         排序方式
     * @param name         用户名或题目名
     * @param languageList 语言列表
     * @param listResult   结果列表
     * @return Page<StatusVO>
     * @author CK
     * @date 2021/4/12 14:57
     */
    Page<StatusVO> listStatus(Integer current, Integer size, Integer sort, String name, List<Integer> languageList, List<Integer> listResult);

    /**
     * 查询提交的第三方代码
     *
     * @param solutionId 提交ID
     * @return SolutionSource
     * @author CK
     * @date 2021/4/12 18:33
     */
    SolutionSource solutionSourceById(Integer solutionId);

    /**
     * 分页查询竞赛状态
     *
     * @param current   当前页
     * @param size      页面大小
     * @param contestId 竞赛ID
     * @return Page<SolutionContestVO>
     * @author CK
     * @date 2021/4/22 21:05
     */
    Page<SolutionContestVO> solutionContest(Integer current, Integer size, Integer contestId);
}
